const arr = [
  { a: 1, b: 2 },
  { a: 1, b: 2 },
  { a: 1, b: 2, c: { a: 1, b: 2 } },
  { a: 1, b: 2, c: { b: 2, a: 1 } },
]
// 对象数组去重

const isObject = (val) => typeof val === 'object' && val !== null
function equal(obj1, obj2) {
  if (!isObject(obj1) || !isObject(obj2)) {
    return Object.is(obj1, obj2)
  }
  const keys1 = Object.keys(obj1)
  const keys2 = Object.keys(obj2)
  if (keys1.length !== keys2.length) {
    return false
  }
  for (const key of keys1) {
    const res = equal(obj1[key], obj2[key])
    if (!res) {
      return false
    }
  }
  return true
}

const res = []

for (const item of arr) {
  let isFind = false
  for (const r of res) {
    if (equal(item, r)) {
      isFind = true
      break
    }
  }
  if (!isFind) {
    res.push(item)
  }
}

console.log(res)
